import type {DataTableColumn, PopoverProps, ScrollbarProps} from 'naive-ui'
import type {CollapseBtnPropsType} from '../XCollapseBtn'
import type {QuestionTipPropsType} from '../XQuestionTip'

/**
 * 表格列配置类型
 */
export type CrudColumn = DataTableColumn & {
  // 表格列的标题
  title: string;
  // 表格列是否可拖拽，提供表格列配置数据时，可以不设置该值，如果没有设置该值，则会自动设置该值为 true
  draggable?: boolean;
  // 表格列是否禁用可以选中展示
  disableChecked?: boolean;
  // 表格列是否选中展示，提供表格列配置数据时，可以不设置该值，如果没有设置该值，则会自动设置该值为 true
  checked?: boolean;
  // 表格列初始状态下，是否选中展示，无需设置该值，设置了也不会生效，该属性会自动根据表格列配置数据的 checked 属性设置该值
  originChecked?: boolean;
  // 表格列的排序，提供表格列配置数据时，无需设置该值，设置了也不会生效，会自动根据表格列配置数据的索引设置该值，即按照表格列数组中的顺序排序
  sort?: number;
  // 表格列初始状态下，是否固定列，无需设置该值，设置了也不会生效，该属性会自动根据表格列配置数据的 fixed 属性设置该值
  originFixed?: 'left' | 'right';
  // 表格列初始状态下，表格列的对齐方式，无需设置该值，设置了也不会生效，会自动根据表格列配置数据的 align 属性设置该值
  originAlign?: 'left' | 'center' | 'right';
}

/**
 * 表格列配置列表的类型
 */
export type CrudColumns = CrudColumn[]

export type CrudColSettingPropsType = {
  // 表格列配置列表
  columns?: CrudColumns
  // 表格列配置更新回调
  'onUpdate:columns'?: (columns: CrudColumns) => void
  // 是否使用内置的选择列的配置
  useBuiltInSelectColumn?: boolean
  // 列设置触发按钮文本
  triggerBtnText?: string
  // 列设置触发按钮是否折叠显示
  triggerBtnCollapse?: boolean
  // 列设置触发按钮 Props
  triggerBtnProps?: Omit<CollapseBtnPropsType, 'text' | 'collapse'>
  // 列设置弹框最大宽度
  colSettingPopoverMaxWidth?: string | number;
  // 列设置列表最大高度
  colSettingListMaxHeight?: string | number;
  // 列设置弹框 Props
  colSettingPopoverProps?: Partial<Omit<PopoverProps, 'to'>>;
  // 列展示 tab 名称
  colShowTabName?: string;
  // 列固定 tab 名称
  colFixTabName?: string;
  // 列对齐 tab 名称
  colAlignTabName?: string;
  // 全选按钮文本
  allBtnText?: string;
  // 列展示全选提示 Props
  colShowAllTipProps?: QuestionTipPropsType
  // 列固定全选提示 Props
  colFixAllTipProps?: QuestionTipPropsType
  // 重置按钮文本
  resetBtnText?: string;
  // 左对齐文本
  leftBtnText?: string;
  // 居中对齐文本
  centerBtnText?: string;
  // 右对齐文本
  rightBtnText?: string;
  // 列配置列表滚动条 Props
  colSettingListScrollbarProps?: Partial<ScrollbarProps>;
}
